//package com.wsf.main.common;
//
//import cn.hutool.core.date.DateUtil;
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONArray;
//import com.alibaba.fastjson.JSONObject;
//
//import com.wsf.main.dto.OutAndInDTO;
//import com.wsf.main.dto.TimeDTO;
//import com.wsf.main.dto.UserDto;
//import com.wsf.main.service.RecviceDataService;
//import lombok.Data;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.apache.commons.lang3.time.DateFormatUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.scheduling.annotation.EnableScheduling;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.util.CollectionUtils;
//
//import javax.annotation.Resource;
//import java.text.SimpleDateFormat;
//import java.util.*;
//import java.util.concurrent.ThreadPoolExecutor;
//import java.util.stream.Collectors;
//
//@Configuration
//@EnableScheduling
//@Slf4j
//public class SomeJob {
//    @Autowired
//    private RecviceDataService recviceDataService;
//    @Autowired
//    private RecviceDataController recviceDataController;
//    @Resource(name = "threadPool")
//    private ThreadPoolExecutor threadPoolExecutor;
//
////    @Scheduled(cron = "0 0/5 * * * ?")
//    public void someTask() {
//        //查询出未发送成功的数据
//        List<Map<String, Object>> list = recviceDataService.getUserList();
//        List<String> list1 = new ArrayList<>();
//        if (list.size() != 0) {
////            Calendar c = Calendar.getInstance();
////            c.setTime(new Date());
////            c.add(Calendar.MINUTE, 20);
////            Date nowDate = c.getTime();
//            log.info("每分钟一次查询未下发的数据-" + list);
//            List<UserDto> userDtoList = new ArrayList<>();
//            for (int i = 0; i < list.size(); i++) {
//                UserDto userDto = new UserDto();
//                Map<String, Object> map = list.get(i);
//                userDto.setStudentNo(String.valueOf(map.get("studentNo")));
//                //转换时间
////                Date date = DateUtil.parse(String.valueOf(map.get("startTime")));
////                if (nowDate.after(date)) {
////                    log.info("当前时间加20分钟之后再开始时间之后，可以下发了");
////                } else {
////                    log.info("当前时间加20分钟之后再开始时间之钱，不能下发");
////                    continue;
////                }
//                userDto.setStartTime(String.valueOf(map.get("startTime")));
//                userDto.setEndTime(String.valueOf(map.get("endTime")));
//                userDto.setId(Integer.valueOf(String.valueOf(map.get("id"))));
//                String personId = recviceDataController.checkUser(userDto.getStudentNo());
//                if (org.apache.commons.lang3.StringUtils.isBlank(personId)) {
//                    log.info("查询不到这用户信息不管---" + userDto.getStudentNo());
//                } else {
//                    if (!list1.contains(personId)) {
//                        userDto.setPersonId(personId);
//                        userDtoList.add(userDto);
//                    }
//                    list1.add(personId);
//                }
//
//            }
//            //判断是否存在用户信息
//            if (userDtoList.size() != 0) {
//                Map<String, Object> stringObjectMap = new HashMap<>();
//                stringObjectMap.put("taskType", 5);
//                String reult1 = ArtemisPostTest.callPostApiGetOrgList("/api/acps/v1/authDownload/task/addition", stringObjectMap);
//                log.info("创建下载任务返回数据--" + reult1);
//                JSONObject jsonObject = JSONObject.parseObject(reult1);
//                if (jsonObject.get("code").equals("0")) {
//                    String data = jsonObject.getString("data");
//                    JSONObject jsonObject4 = JSONObject.parseObject(data);
//                    String taskId = jsonObject4.getString("taskId");
//                    log.info("开始批量下发数据");
//                    recviceDataController.synRecordNew(userDtoList, taskId);
//                }
//
//            }
//        }
//    }
//
//
//    /**
//     * 定时推送数据11点或1分钟跑一次
//     */
//    @Scheduled(cron = "0 02 23 * * ?")
//    public void sendRecord1() {
//        log.info("定时推送数据11点或1分钟跑一次");
//        SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd");
//        SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        List<OutAndInDTO> outAndInDTOList = recviceDataService.sendRecord1(df1.format(new Date()));
//        //根据学号分组
//        Map<String,List<OutAndInDTO>>map=outAndInDTOList.stream().collect(Collectors.groupingBy(OutAndInDTO::getJobNo));
//        for(Map.Entry<String,List<OutAndInDTO>>entry: map.entrySet()){
//            JSONObject data = new JSONObject();
//            String jobNo=entry.getKey();
//            //根据时间排倒叙
//            List<OutAndInDTO>outAndInDTOList1=entry.getValue();
//            if(!CollectionUtils.isEmpty(outAndInDTOList1)){
//                outAndInDTOList1.sort(Comparator.comparing(OutAndInDTO::getTime).reversed());
//                //然后取出第一个
//                OutAndInDTO outAndInDTO=outAndInDTOList1.get(0);
//                //如果最后时间是出，那么必定算晚归
//                //如果是进就不管
//                if(0==outAndInDTO.getType()){
//                    //表示出去
//                    //装换时间
//                    Date date12 = cn.hutool.core.date.DateUtil.parse(outAndInDTO.getEventTime());
//                    String rightTime = df2.format(date12);
//                    outAndInDTO.setEventTime(rightTime);
//                    data.put("eventTime", rightTime);
//                    data.put("type", outAndInDTO.getType());
//                    data.put("onlyCode", outAndInDTO.getOnlyCode());
//                    data.put("isOutLate","1");
//                    String result = HttpUtils.doPost("https://xgxt.cqca.edu.cn/leaveAction_sendInOutCompusInformationTask.action", data.toString());
//                    log.info("定时11点发送到学工的返回数据--" + result);
//                }
//            }
//
//        }
////        SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
////        for (int i = 0; i < outAndInDTOList.size(); i++) {
////            JSONObject data = new JSONObject();
////            OutAndInDTO outAndInDTO = outAndInDTOList.get(i);
////            String eventTime = outAndInDTO.getEventTime();
////            String onlyCode = outAndInDTO.getOnlyCode();
////            int type = outAndInDTO.getType();
////            //装换时间
////            Date date12 = cn.hutool.core.date.DateUtil.parse(eventTime);
////            String rightTime = df2.format(date12);
////            outAndInDTO.setEventTime(rightTime);
////            data.put("eventTime", rightTime);
////            data.put("type", type);
////            data.put("onlyCode", onlyCode);
////            String result = HttpUtils.doPost("https://xgxt.cqca.edu.cn/leaveAction_sendInOutCompusInformationTask.action", data.toString());
////            log.info("定时发送到学工的返回数据--" + result);
////            JSONObject jsonObject = JSONObject.parseObject(result);
////            if ("200".equals(jsonObject.getString("code"))) {
////                //表示发送成功，修改任务状态
////                recviceDataService.updateOutStatus(outAndInDTO.getId());
////            }
////        }
//    }
//
//
//    /**
//     * 定时推送数据
//     */
//    @Scheduled(cron = "45 0/2 * * * ?")
//    public void sendRecord() {
//        List<OutAndInDTO> outAndInDTOList = recviceDataService.sendRecord();
//        SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        for (int i = 0; i < outAndInDTOList.size(); i++) {
//            JSONObject data = new JSONObject();
//            OutAndInDTO outAndInDTO = outAndInDTOList.get(i);
//            String eventTime = outAndInDTO.getEventTime();
//            String onlyCode = outAndInDTO.getOnlyCode();
//            int type = outAndInDTO.getType();
//            //装换时间
//            Date date12 = cn.hutool.core.date.DateUtil.parse(eventTime);
//            String rightTime = df2.format(date12);
//            outAndInDTO.setEventTime(rightTime);
//            data.put("eventTime", rightTime);
//            data.put("type", type);
//            data.put("onlyCode", onlyCode);
//            String result = HttpUtils.doPost("https://xgxt.cqca.edu.cn/leaveAction_sendInOutCompusInformationTask.action", data.toString());
//            log.info("定时发送到学工的返回数据--" + result);
//            JSONObject jsonObject = JSONObject.parseObject(result);
//            if ("200".equals(jsonObject.getString("code"))) {
//                //表示发送成功，修改任务状态
//                recviceDataService.updateOutStatus(outAndInDTO.getId());
//            }
//        }
//    }
//
//    @Scheduled(cron = "0 0/2 * * * ?")
//    public void getRecord() {
//        log.info("2分钟获取一次进出门的记录");
//        String pattern = "YYYY-MM-dd'T'HH:mm:ss.000ZZ";
//        //查收上一次查询的时间
//        TimeDTO timeDTO = recviceDataService.getTime();
//        Date time = timeDTO.getTime();//数据库存的时间，作为开始时间，当前时间为结束时间
//        Date now = new Date();
//        //转换成ISO时间
//        String startTime = DateFormatUtils.format(time, pattern);
//        String endTime = DateFormatUtils.format(now, pattern);
//        Map<String, Object> mapPerson = new HashMap<>();
//        mapPerson.put("pageNo", 1);
//        mapPerson.put("pageSize", 500);
//        mapPerson.put("sort", "eventTime");
//        mapPerson.put("order", "desc");
//        mapPerson.put("startTime", startTime);
//        mapPerson.put("endTime", endTime);
//        try {
//            String result = ArtemisPostTest.callPostApiGetOrgList("/api/acs/v2/door/events", mapPerson);
//            //解析返回的数据
//            JSONObject jsonObject = JSON.parseObject(result);
//            if ("0".equals(jsonObject.getString("code"))) {
//                JSONObject data = jsonObject.getJSONObject("data");
//                JSONArray jsonArray = data.getJSONArray("list");
//                List<OutAndInDTO> outAndInDTOList = new ArrayList<>();
//                for (int i = 0; i < jsonArray.size(); i++) {
//                    //先判断是否有没有学号的数据
//
//                    OutAndInDTO outAndInDTO = new OutAndInDTO();
//                    JSONObject object = jsonArray.getJSONObject(i);
//                    if (object.get("jobNo") == null) {
//                        log.info("学号为空，直接丢弃数据");
//                        continue;
//                    }
//                    String eventTime = object.getString("eventTime");
//                    String personId = object.getString("personId");
//                    String personName = object.getString("personName");
//                    String doorIndexCode = object.getString("doorIndexCode");
//                    String doorName = object.getString("doorName");
//                    String jobNo = object.getString("jobNo");
//                    outAndInDTO.setDoorIndexCode(doorIndexCode);
//                    outAndInDTO.setStatus(0);
//                    outAndInDTO.setJobNo(jobNo);
//                    outAndInDTO.setDoorName(doorName);
//                    outAndInDTO.setEventTime(eventTime);
//                    outAndInDTO.setPersonId(personId);
//                    outAndInDTO.setPersonName(personName);
//                    if (doorName.contains("出")) {
//                        outAndInDTO.setType(0);
//                    } else if (doorName.contains("进")) {
//                        outAndInDTO.setType(1);
//                    }
//                    outAndInDTO.setTime(new Date());
//                    //只处理进的数据，出的数据不管
////                    if (outAndInDTO.getType() == 1) {
//                    //根据学号和时间查询出已下发的数据
//                    List<UserDto> userDtoList = recviceDataService.getUserListByNo(jobNo, eventTime);
//                    UserDto userDto;//默认取第一个
//                    if (userDtoList.size() == 0) {
//                        //为0 说明这个人已经超出了规定时间返回,那么按照时间倒序拍，取第一个数据
//                        userDto = recviceDataService.getUserByNo(jobNo, eventTime);
//                        //因为存在不需要权限的进出人，这部分人不需要处理
//                        if (userDto != null) {
//                            if (StringUtils.isBlank(userDto.getOnlyCode())) {
//                                log.info("onlyCode是空的状态改了2加个记录");
//                                outAndInDTO.setStatus(2);
//                            }
//                            outAndInDTO.setOnlyCode(userDto.getOnlyCode());
//                        } else {
//                            log.info("查询不到,直接丢弃");
//                            continue;
//                        }
//                    } else {
//                        userDto = userDtoList.get(0);
//                        if (StringUtils.isBlank(userDto.getOnlyCode())) {
//                            log.info("onlyCode是空的状态改了2加个记录");
//                            outAndInDTO.setStatus(2);
//                        }
//                        outAndInDTO.setOnlyCode(userDto.getOnlyCode());
//                    }
//
////                    }
//
//                    outAndInDTOList.add(outAndInDTO);
//                }
//                if (outAndInDTOList.size() != 0) {
//                    //批量插入
//                    recviceDataService.insertOutAndIn(outAndInDTOList);
//                    //开始异步操作数据
//                    log.info("有数据");
//                    threadPoolExecutor.submit(() -> synRecord(outAndInDTOList));
//                }
//            } else {
//                log.info("查询失败不处理");
//            }
//            //更新数据库时间
//            recviceDataService.updateTime(now);
//            log.info("查询返回的数据--" + result);
//
//        } catch (Exception e) {
//            log.info("接受信息错误", e);
//        }
//    }
//
//    //异步推送数据
//    public void synRecord(List<OutAndInDTO> outAndInDTOList) {
//        //循环吧数据推到学工系统
//        SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        for (int i = 0; i < outAndInDTOList.size(); i++) {
//            JSONObject data = new JSONObject();
//            OutAndInDTO outAndInDTO = outAndInDTOList.get(i);
//            String eventTime = outAndInDTO.getEventTime();
//            String onlyCode = outAndInDTO.getOnlyCode();
//            if (StringUtils.isBlank(onlyCode)) {
//                log.info("onlyCode是空的不处理");
//                continue;
//            }
//            int type = outAndInDTO.getType();
//            //装换时间
//            Date date12 = cn.hutool.core.date.DateUtil.parse(eventTime);
//            String rightTime = df2.format(date12);
//            outAndInDTO.setEventTime(rightTime);
//            data.put("eventTime", rightTime);
//            data.put("type", type);
//            data.put("onlyCode", onlyCode);
//            String result = HttpUtils.doPost("https://xgxt.cqca.edu.cn/leaveAction_sendInOutCompusInformationTask.action", data.toString());
//            log.info("发送到学工的返回数据--" + result);
//            JSONObject jsonObject = JSONObject.parseObject(result);
//            if ("200".equals(jsonObject.getString("code"))) {
//                //表示发送成功，修改任务状态
//                recviceDataService.updateOutStatus(outAndInDTO.getId());
//            }
//        }
//
//    }
//}
